Иерархия исключений в Kotlin
Иерархия исключений в Kotlin
В Kotlin нет собственной иерархии исключений — он полностью использует модель исключений Java, поскольку компилируется в байт-код JVM (или в нативный код/JS с соответствующими адаптациями). На платформе JVM все исключения Kotlin являются подклассами java.lang.Throwable, как и в Java.
Однако Kotlin вносит семантические изменения:
- Все исключения в Kotlin непроверяемые (unchecked), даже если они наследуются от
java.lang.Exception. - Нет ключевого слова
throwsв сигнатурах функций. - Нет необходимости объявлять или перехватывать исключения.
Иерархия исключений в Kotlin (на JVM)
Корневой класс:
kotlin.Throwable— псевдоним дляjava.lang.Throwable.
Основные категории:
-
kotlin.Exception— псевдоним дляjava.lang.Exception.
Включает все стандартные исключения, такие как:IllegalArgumentExceptionIllegalStateExceptionNullPointerExceptionIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException
ArithmeticExceptionClassCastExceptionNumberFormatExceptionIOExceptionи его подклассы (например,FileNotFoundException)- и другие исключения из
java.lang,java.io,java.utilи т.д.
-
kotlin.Error— псевдоним дляjava.lang.Error.
Используется для фатальных ошибок времени выполнения:OutOfMemoryErrorStackOverflowErrorNoClassDefFoundErrorAssertionError- и др.
Специфичные исключения Kotlin (встроенные в стандартную библиотеку Kotlin)
Эти исключения определены в пакете kotlin и предназначены для использования в идиоматичном Kotlin-коде:
kotlin.IllegalArgumentException— выбрасывается при передаче недопустимого аргумента (например, черезrequire()).kotlin.IllegalStateException— выбрасывается при нарушении состояния объекта (например, черезcheck()).kotlin.NullPointerException— возникает при разыменованииnull(например, при использовании оператора!!).kotlin.IndexOutOfBoundsException— выбрасывается при выходе за границы коллекции или массива.kotlin.ArithmeticException— например, при делении на ноль.kotlin.TypeCastException— при неудачном приведении типа (as).kotlin.NoSuchElementException— например, при вызове.first()на пустой коллекции.kotlin.UnsupportedOperationException— при вызове не поддерживаемой операции (например, изменение неизменяемого списка).
Все эти исключения — алиасы соответствующих классов Java (
java.lang.*), но используются в контексте Kotlin-стандартной библиотеки.
Особенности:
-
Нет проверяемых исключений: даже если функция на Java помечена как
throws IOException, в Kotlin её можно вызывать безtry-catchили объявленияthrows. -
Функции-помощники: Kotlin предоставляет встроенные функции для генерации исключений:
error(message)→IllegalStateExceptionrequire(condition)→IllegalArgumentExceptioncheck(condition)→IllegalStateExceptionTODO()→NotImplementedError(подклассRuntimeException)
-
NotImplementedError: специфичное исключение Kotlin, используемое по умолчанию в заглушкахTODO(). Наследуется отjava.lang.RuntimeException.
Примеры типичных исключений в Kotlin-коде:
listOf(1, 2, 3)[10] // IndexOutOfBoundsException
null!! // NullPointerException
"abc".toInt() // NumberFormatException
listOf<Int>().first() // NoSuchElementException
TODO("not implemented") // NotImplementedError
На других платформах:
- Kotlin/Native: использует собственную иерархию исключений, но сохраняет совместимость по именам (
kotlin.Exception,kotlin.Errorи т.д.). Проверяемых исключений также нет. - Kotlin/JS: исключения маппятся на JavaScript-ошибки (
Error,TypeErrorи т.д.), но с сохранением Kotlin-интерфейса.
Таким образом, список типов исключений в Kotlin совпадает с Java на JVM, но с ключевым отличием: все исключения считаются непроверяемыми, а стандартная библиотека Kotlin активно использует подмножество java.lang.* исключений для своих встроенных функций.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Первоначальной мотивацией была разработка инструмента — языка, который бы — Полностью совмещался с Java на уровне бинарного кода и исходных текстов, чтобы существующие проекты можно было постепенно… Kotlin — это язык программирования, созданный компанией JetBrains с целью сочетать выразительность, безопасность и совместимость с существующими экосистемами. За годы своего развития он стал не… Фундамент для начинающего программиста - что повторить, как работать, чего ожидать. Набор советов, правил, принципов и обычаев в разработке на этом языке. Это архитектурный подход. Проект разделяется на — commonMain — код, компилируемый во все цели (бизнес-логика, DTO, алгоритмы), androidMain, iosMain, jvmMain, jsMain и др. — платформо-специфичные… Типизация, набор правил определения типа данных значений языка. Логические операторы в Kotlin служат для построения составных условий и управления логикой ветвления. В языке поддерживаются три основных оператора — (логическое И), (логическое ИЛИ) и (логическое… В Kotlin отсутствует классический цикл for (initialization; condition; increment), привычный по языкам C-семейства. Вместо него используется конструкция for, основанная на понятии итерации по… Модификаторы доступа в Kotlin — public — по умолчанию, доступно из любого места, private — доступно только внутри объявляющего класса или файла (для top-level элементов), protected — доступно внутри… Кавычки, точки, запятые, скобки и прочие знаки препинания. Kotlin использует набор зарезервированных слов для построения синтаксических конструкций языка. Все ключевые слова разделены на категории по назначению. Набор функций, которые включены в стандартную библиотеку языка.История языка Kotlin
Экосистема Kotlin-приложений
Что требуется знать перед началом изучения языка программирования Kotlin
Рекомендации по разработке на Kotlin
Основы языка Kotlin
Типы данных и объявление переменных
Операторы и выражения в Kotlin
Циклы и управляющие конструкции
Объектно-ориентированное программирование в Kotlin
Синтаксис и пунктуация в Kotlin
Ключевые слова языка Kotlin
Встроенные функции и расширения Kotlin